class ArrowClass {
    constructor( x, y=7 ) {
        this.x = x;
        this.y = x+y;
        this._inner_a = "inner_a";
    }
    // 错误写法, 在constructor外不能定义属性, 只能定义静态变量
    // let this._inner_var = 0;
    static _inner_static_var = 0;

    // function printResult() {    // 错误定义方法, 类中不需要function关键字
    printResult() {
        console.log( " -------- Result: -------- ", this.x * this.y );
    }

    // get/set 的函数名就是变量的名称, 可以截断访问;
    get _inner_a() {
        return this._inner_a;
    }
    set _inner_a( value ) {
        console.log("NoWaytoSet");
    }

}

export default class testArrowClassMain {
    constructor() {

    }
    testClass() {
        let myClass = new ArrowClass( 9 );
        myClass.printResult();
    }

    testArrow() {
        console.log( "-----------------------" );

        let f_simple = v => v+1;
        /*
            等价于 v表示参数 一个参数不需要加括号
            let f_simple = function(v){
                return v+1;
            }
        */
        console.log( "simple arrow : ",f_simple( 1 ) );

        let f_double_para = ( v1, v2 ) => { v1 = v1*v1; console.log( v1*v2 ); };
        console.log( f_double_para( 3, 9 ) );
        /*
            等价于 v1, v2表示参数 两个参数需要加括号 多条语句需要用花括号包围
            let f_double_para = function(v1, v2){
                console.log( v1*v2 );
            }
        */

        // ------------------------------
        // ES6中的对象是键值对组合的集合 用花括号包围 当箭头函数需要返回对象时 需要用圆括号包含花括号
        let f_return_object = ( v1, v2 ) => ( { 
            v1: v1 * v1,
            v2: v2 * v2
        } );
        let obj_return = f_return_object( 1, 3 );
        console.log( "Object return: ", typeof( obj_return ) );


        // ------------------------------



    }
}
// 在其他文件中只需要 import testArrow from "./TestArrow.js" 即可
// export default testArrow;
// export default testClass;
// export default ArrowClass;    // 错误写法, 一个文件只能有一个默认导出